const http = require('http');
const https = require ('https');  // https服务器
const httpProxy = require ('http-proxy');  // 反向代理（将某个路径反向代理到其他端口，配合https不能+端口的毛病）
const fs = require('fs');

//读取当前文件的绝对路径（本文件和项目文件放到同一目录）
const documentRoot = __dirname;

//自己配置项目文件的存放路径
//const documentRoot = "C:\";

//证书配置
//这里的证书和是ssl通配符证书，不同的二级域名都是同一个的证书
//通配符证书才能使得安全域名代理到不同的端口
const options = {
	key: fs.readFileSync('./3383790__3jeye.com.key').toString(),
	cert: fs.readFileSync('./3383790__3jeye.com.pem').toString()
}

// 新建一个代理 Proxy Server 对象
let proxy = httpProxy.createProxyServer({
	ws:true
});

// 捕获异常
proxy.on('error', function (err, req, res) {
	console.log(err)
	res.end(err);
});

//端口配置
const ports = {
	ceshi:"8300",		//测试
	yuncheng:"8500",	//运城
	lvliang:"8400",		//吕梁
	// linfen:"8402",		//临汾
	// datong:"8403"		//大同
}


let app = (req,res)=>{
    //客户端输入的url，例如如果输入localhost:8888/index.html
    //那么这里的url== /index.html 
	
	//这里配置了默认文件路径为/index.html
	
	let url;
	if(req.url=="/" || req.url=='/luru/' || req.url=='/baogao/'){
		url = req.url + "index.html"
	}else if(req.url.includes('/luru/?')){	//微信分享
		url = "/luru/index.html"
	}else if(req.url.includes('/baogao/?')){	//微信分享
		url = "/baogao/index.html"
	}else{
		//设备pc或者移动端机器码
		url = req.url.indexOf("?")!=-1 ? (req.url.indexOf("device")!=-1?req.url.slice(0,req.url.indexOf("?"))+"index.html":req.url.slice(0,req.url.indexOf("?"))) : req.url;
	}
	
	/* 非https重定向 */
	if(!req.client.ssl){
		res.writeHead(301,{
            'Location': 'https://'+req.headers.host+url
        })
		res.end();
	}
	
	/* 接口请求 反向代理到相应端口 */
	if(url.includes("/myopia/")){
		let curHost = req.headers.host.split(".")[0];
		//按需代理相应端口
		proxy.web(req, res ,{
			target: 'http://127.0.0.1:'+ports[curHost]
		});
	}else{
		//将URLcode转为中文，解决中文图片404问题
		let file = documentRoot + decodeURIComponent(url);
		
		/*
			读取文件
			一参为文件路径
			二参为回调函数
				回调函数的一参为读取错误返回的信息，返回空就没有错误
				二参为读取成功返回的文本内容
		*/
	   
		fs.readFile( file , (err,data)=>{
			if(err){
				res.writeHeader(404,{
					'content-type' : 'text/html;charset="utf-8"'
				});
				res.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
				res.end();
			}else{
				//这里判定请求的是网页还是其他文件
				//如果文件过多，可以用fs模块识别文件的类型，以便设置不同的content-type
				if(url.lastIndexOf(".css")!=-1){
					res.writeHeader(200,{
						'content-type' : 'text/css;charset="utf-8"'
					});
				}else if(url.lastIndexOf(".pdf")!=-1){
					res.writeHeader(200,{
						'content-type' : 'application/pdf'
					});
				}else{
					res.writeHeader(200,{
						'content-type' : 'text/html;charset="utf-8"'
					});
				}
				res.end(data);
			}
		});
		
	}
	
}

var httpServer = http.createServer(app).listen(80);
var httpsServer = https.createServer(options,app).listen(443);

//socket接收
let wsProxy 
httpsServer.on('upgrade', (req,socket,head)=>{
	let curHost = req.headers.host.split(".")[0];
	
	if(wsProxy){
		wsProxy.close()
	}
	
	//按需代理相应端口
	wsProxy = httpProxy.createProxyServer({
		target: {
			host: '127.0.0.1',
			port: ports[curHost]
		},
		ws:true
	});
	wsProxy.ws(req, socket, head);
})

console.log('HTTP Server running on port 80');
console.log('HTTPS Server running on port 443');